package cn.tedu.service.port;

import cn.tedu.entity.User;
import cn.tedu.service.ex.*;

import javax.servlet.http.HttpSession;

public interface UserService {

    /**
     * 用户注册
     * @param username  用户名
     * @param password  密码
     * @param upwdconfirm   确认密码
     * @param email 邮箱地址
     * @param phone 电话号码
     * @throws PasswordExcption 自定义密码信息异常
     * @throws UserNotFoundException    自定义用户信息异常
     * @throws EmailExcption    自定义邮箱信息异常
     * @throws PhoneExcption    自定义电话信息异常
     */
    void regist(String username,
                String password,
                String upwdconfirm,
                String email,
                String phone,
                HttpSession session) throws PasswordExcption, UserNotFoundException, EmailExcption, PhoneExcption;

    /**
     * 查询用户信息
     * @param id    用户id
     * @return  返回整个用户信息
     * @throws UserNotFoundException    自定义用户信息异常
     */
    User findUserById(Integer id) throws UserNotFoundException;

    /**
     * 检查用户名是否重复
     * @param username 用户名信息
     * @return         返回用户名
     * @throws UserNotFoundException    自定义用户信息异常
     */
    String registUser(String username) throws UserNotFoundException;

    /**
     * 检查邮箱是否重复
     * @param email 邮箱信息
     * @throws UserNotFoundException 自定义邮箱信息异常
     */
     void registEmail(String email) throws EmailExcption;

    /**
     * 检查手机是否重复
     * @param phone 手机信息
     * @throws PhoneExcption    自定义手机信息错误异常
     */
     void registPhone(String phone) throws PhoneExcption;

    /**
     * 登录
     * @param username  用户名
     * @param password  密码
     * @throws UserNotFoundException    自定义用户信息异常
     * @throws PasswordExcption     自定义密码信息异常
     */
    void login(String username, String password, HttpSession session) throws UserNotFoundException,PasswordExcption;

    /**
     * 修改密码
     * @param id    用户id
     * @param oldpassword   原始密码
     * @param newpassword   新密码
     * @param upwdconfirm   确认密码
     * @return  返回修改后受影响的行数，0为修改失败，1为修改成功
     * @throws PasswordExcption 自定义密码信息异常PasswordExcption
     */
    int changePassword(Integer id, String oldpassword,String newpassword, String upwdconfirm) throws PasswordExcption, UserNotFoundException;

    /**
     * 修改个人信息
     * @param id    用户id
     * @param username  用户名
     * @param gender    性别
     * @param phone     手机号
     * @param email     电子邮箱
     * @return      返回受影响行数
     * @throws UserNotFoundException    自定义用户名信息异常
     * @throws UsernameAlreadyExistsExcption    自定义用户名信息已被占用异常
     */
    Integer editProfile(Integer id, String username, Integer gender, String phone, String email)throws UserNotFoundException, UsernameAlreadyExistsExcption;
}
